home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / CodeSource.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.9 KB  |  358 lines

  1. package java.security;
  2.  
  3. import [Ljava.security.CodeSigner;;
  4. import [Ljava.security.cert.Certificate;;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.io.Serializable;
  10. import java.net.SocketPermission;
  11. import java.net.URL;
  12. import java.security.cert.CertPath;
  13. import java.security.cert.Certificate;
  14. import java.security.cert.CertificateEncodingException;
  15. import java.security.cert.CertificateException;
  16. import java.security.cert.CertificateFactory;
  17. import java.security.cert.X509Certificate;
  18. import java.util.ArrayList;
  19. import java.util.Hashtable;
  20.  
  21. public class CodeSource implements Serializable {
  22.    private static final long serialVersionUID = 4977541819976013951L;
  23.    private URL location;
  24.    private transient CodeSigner[] signers = null;
  25.    private transient Certificate[] certs = null;
  26.    // $FF: renamed from: sp java.net.SocketPermission
  27.    private transient SocketPermission field_0;
  28.    private transient CertificateFactory factory = null;
  29.  
  30.    public CodeSource(URL var1, Certificate[] var2) {
  31.       this.location = var1;
  32.       if (var2 != null) {
  33.          this.certs = (Certificate[])((Certificate;)var2).clone();
  34.       }
  35.  
  36.    }
  37.  
  38.    public CodeSource(URL var1, CodeSigner[] var2) {
  39.       this.location = var1;
  40.       if (var2 != null) {
  41.          this.signers = (CodeSigner[])((CodeSigner;)var2).clone();
  42.       }
  43.  
  44.    }
  45.  
  46.    public int hashCode() {
  47.       return this.location != null ? this.location.hashCode() : 0;
  48.    }
  49.  
  50.    public boolean equals(Object var1) {
  51.       if (var1 == this) {
  52.          return true;
  53.       } else if (!(var1 instanceof CodeSource)) {
  54.          return false;
  55.       } else {
  56.          CodeSource var2 = (CodeSource)var1;
  57.          if (this.location == null) {
  58.             if (var2.location != null) {
  59.                return false;
  60.             }
  61.          } else if (!this.location.equals(var2.location)) {
  62.             return false;
  63.          }
  64.  
  65.          return this.matchCerts(var2, true);
  66.       }
  67.    }
  68.  
  69.    public final URL getLocation() {
  70.       return this.location;
  71.    }
  72.  
  73.    public final Certificate[] getCertificates() {
  74.       if (this.certs != null) {
  75.          return (Certificate[])this.certs.clone();
  76.       } else if (this.signers == null) {
  77.          return null;
  78.       } else {
  79.          ArrayList var1 = new ArrayList();
  80.  
  81.          for(int var2 = 0; var2 < this.signers.length; ++var2) {
  82.             var1.addAll(this.signers[var2].getSignerCertPath().getCertificates());
  83.          }
  84.  
  85.          this.certs = (Certificate[])var1.toArray(new Certificate[var1.size()]);
  86.          return (Certificate[])this.certs.clone();
  87.       }
  88.    }
  89.  
  90.    public final CodeSigner[] getCodeSigners() {
  91.       if (this.signers != null) {
  92.          return (CodeSigner[])this.signers.clone();
  93.       } else if (this.certs != null) {
  94.          this.signers = this.convertCertArrayToSignerArray(this.certs);
  95.          return (CodeSigner[])this.signers.clone();
  96.       } else {
  97.          return null;
  98.       }
  99.    }
  100.  
  101.    public boolean implies(CodeSource var1) {
  102.       if (var1 == null) {
  103.          return false;
  104.       } else {
  105.          return this.matchCerts(var1, false) && this.matchLocation(var1);
  106.       }
  107.    }
  108.  
  109.    private boolean matchCerts(CodeSource var1, boolean var2) {
  110.       if (this.certs == null && this.signers == null) {
  111.          if (!var2) {
  112.             return true;
  113.          } else {
  114.             return var1.certs == null && var1.signers == null;
  115.          }
  116.       } else if (this.signers != null && var1.signers != null) {
  117.          if (var2 && this.signers.length != var1.signers.length) {
  118.             return false;
  119.          } else {
  120.             for(int var7 = 0; var7 < this.signers.length; ++var7) {
  121.                boolean var6 = false;
  122.  
  123.                for(int var8 = 0; var8 < var1.signers.length; ++var8) {
  124.                   if (this.signers[var7].equals(var1.signers[var8])) {
  125.                      var6 = true;
  126.                      break;
  127.                   }
  128.                }
  129.  
  130.                if (!var6) {
  131.                   return false;
  132.                }
  133.             }
  134.  
  135.             return true;
  136.          }
  137.       } else if (this.certs != null && var1.certs != null) {
  138.          if (var2 && this.certs.length != var1.certs.length) {
  139.             return false;
  140.          } else {
  141.             for(int var4 = 0; var4 < this.certs.length; ++var4) {
  142.                boolean var3 = false;
  143.  
  144.                for(int var5 = 0; var5 < var1.certs.length; ++var5) {
  145.                   if (this.certs[var4].equals(var1.certs[var5])) {
  146.                      var3 = true;
  147.                      break;
  148.                   }
  149.                }
  150.  
  151.                if (!var3) {
  152.                   return false;
  153.                }
  154.             }
  155.  
  156.             return true;
  157.          }
  158.       } else {
  159.          return false;
  160.       }
  161.    }
  162.  
  163.    private boolean matchLocation(CodeSource var1) {
  164.       if (this.location == null) {
  165.          return true;
  166.       } else if (var1 != null && var1.location != null) {
  167.          if (this.location.equals(var1.location)) {
  168.             return true;
  169.          } else if (!this.location.getProtocol().equals(var1.location.getProtocol())) {
  170.             return false;
  171.          } else {
  172.             String var2 = this.location.getHost();
  173.             String var3 = var1.location.getHost();
  174.             if (var2 != null && (!"".equals(var2) && !"localhost".equals(var2) || !"".equals(var3) && !"localhost".equals(var3)) && !var2.equals(var3)) {
  175.                if (var3 == null) {
  176.                   return false;
  177.                }
  178.  
  179.                if (this.field_0 == null) {
  180.                   this.field_0 = new SocketPermission(var2, "resolve");
  181.                }
  182.  
  183.                if (var1.field_0 == null) {
  184.                   var1.field_0 = new SocketPermission(var3, "resolve");
  185.                }
  186.  
  187.                if (!this.field_0.implies(var1.field_0)) {
  188.                   return false;
  189.                }
  190.             }
  191.  
  192.             if (this.location.getPort() != -1 && this.location.getPort() != var1.location.getPort()) {
  193.                return false;
  194.             } else {
  195.                if (this.location.getFile().endsWith("/-")) {
  196.                   String var4 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
  197.                   if (!var1.location.getFile().startsWith(var4)) {
  198.                      return false;
  199.                   }
  200.                } else if (this.location.getFile().endsWith("/*")) {
  201.                   int var7 = var1.location.getFile().lastIndexOf(47);
  202.                   if (var7 == -1) {
  203.                      return false;
  204.                   }
  205.  
  206.                   String var5 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
  207.                   String var6 = var1.location.getFile().substring(0, var7 + 1);
  208.                   if (!var6.equals(var5)) {
  209.                      return false;
  210.                   }
  211.                } else if (!var1.location.getFile().equals(this.location.getFile()) && !var1.location.getFile().equals(this.location.getFile() + "/")) {
  212.                   return false;
  213.                }
  214.  
  215.                return this.location.getRef() == null ? true : this.location.getRef().equals(var1.location.getRef());
  216.             }
  217.          }
  218.       } else {
  219.          return false;
  220.       }
  221.    }
  222.  
  223.    public String toString() {
  224.       StringBuilder var1 = new StringBuilder();
  225.       var1.append("(");
  226.       var1.append(this.location);
  227.       if (this.certs != null && this.certs.length > 0) {
  228.          for(int var3 = 0; var3 < this.certs.length; ++var3) {
  229.             var1.append(" " + this.certs[var3]);
  230.          }
  231.       } else if (this.signers != null && this.signers.length > 0) {
  232.          for(int var2 = 0; var2 < this.signers.length; ++var2) {
  233.             var1.append(" " + this.signers[var2]);
  234.          }
  235.       } else {
  236.          var1.append(" <no signer certificates>");
  237.       }
  238.  
  239.       var1.append(")");
  240.       return var1.toString();
  241.    }
  242.  
  243.    private void writeObject(ObjectOutputStream var1) throws IOException {
  244.       var1.defaultWriteObject();
  245.       if (this.certs != null && this.certs.length != 0) {
  246.          var1.writeInt(this.certs.length);
  247.  
  248.          for(int var2 = 0; var2 < this.certs.length; ++var2) {
  249.             Certificate var3 = this.certs[var2];
  250.  
  251.             try {
  252.                var1.writeUTF(var3.getType());
  253.                byte[] var4 = var3.getEncoded();
  254.                var1.writeInt(var4.length);
  255.                var1.write(var4);
  256.             } catch (CertificateEncodingException var5) {
  257.                throw new IOException(var5.getMessage());
  258.             }
  259.          }
  260.       } else {
  261.          var1.writeInt(0);
  262.       }
  263.  
  264.       if (this.signers != null && this.signers.length > 0) {
  265.          var1.writeObject(this.signers);
  266.       }
  267.  
  268.    }
  269.  
  270.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  271.       Hashtable var3 = null;
  272.       var1.defaultReadObject();
  273.       int var4 = var1.readInt();
  274.       if (var4 > 0) {
  275.          var3 = new Hashtable(3);
  276.          this.certs = new Certificate[var4];
  277.       }
  278.  
  279.       for(int var5 = 0; var5 < var4; ++var5) {
  280.          String var6 = var1.readUTF();
  281.          CertificateFactory var2;
  282.          if (var3.containsKey(var6)) {
  283.             var2 = (CertificateFactory)var3.get(var6);
  284.          } else {
  285.             try {
  286.                var2 = CertificateFactory.getInstance(var6);
  287.             } catch (CertificateException var13) {
  288.                throw new ClassNotFoundException("Certificate factory for " + var6 + " not found");
  289.             }
  290.  
  291.             var3.put(var6, var2);
  292.          }
  293.  
  294.          Object var7 = null;
  295.  
  296.          try {
  297.             var14 = new byte[var1.readInt()];
  298.          } catch (OutOfMemoryError var12) {
  299.             throw new IOException("Certificate too big");
  300.          }
  301.  
  302.          var1.readFully(var14);
  303.          ByteArrayInputStream var8 = new ByteArrayInputStream(var14);
  304.  
  305.          try {
  306.             this.certs[var5] = var2.generateCertificate(var8);
  307.          } catch (CertificateException var11) {
  308.             throw new IOException(var11.getMessage());
  309.          }
  310.  
  311.          var8.close();
  312.       }
  313.  
  314.       try {
  315.          this.signers = (CodeSigner[])var1.readObject();
  316.       } catch (IOException var10) {
  317.       }
  318.  
  319.    }
  320.  
  321.    private CodeSigner[] convertCertArrayToSignerArray(Certificate[] var1) {
  322.       if (var1 == null) {
  323.          return null;
  324.       } else {
  325.          try {
  326.             if (this.factory == null) {
  327.                this.factory = CertificateFactory.getInstance("X.509");
  328.             }
  329.  
  330.             int var2 = 0;
  331.             ArrayList var3 = new ArrayList();
  332.  
  333.             while(var2 < var1.length) {
  334.                ArrayList var4 = new ArrayList();
  335.                var4.add(var1[var2++]);
  336.  
  337.                int var5;
  338.                for(var5 = var2; var5 < var1.length && var1[var5] instanceof X509Certificate && ((X509Certificate)var1[var5]).getBasicConstraints() != -1; ++var5) {
  339.                   var4.add(var1[var5]);
  340.                }
  341.  
  342.                var2 = var5;
  343.                CertPath var6 = this.factory.generateCertPath(var4);
  344.                var3.add(new CodeSigner(var6, (Timestamp)null));
  345.             }
  346.  
  347.             if (var3.isEmpty()) {
  348.                return null;
  349.             } else {
  350.                return (CodeSigner[])var3.toArray(new CodeSigner[var3.size()]);
  351.             }
  352.          } catch (CertificateException var7) {
  353.             return null;
  354.          }
  355.       }
  356.    }
  357. }
  358.